package com.hmy.material.service;

import com.hmy.material.domain.HmyMateriaFeedStore;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author zxh
 * @version 1.0
 * @description: 物料存储业务service接口
 * @date 2024/1/31 12:24
 */
public interface StoreService {

    /**
     * 根据条件查询列表 条件：存储地点、饲料类型、存储时间
     *
     * @param materiaFeedStorePosition     存储地点
     * @param materiaFeedType              饲料类型
     * @param materiaFeedPurchaseDateStart 存储开始时间
     * @param materiaFeedPurchaseDateEnd   存储结束时间
     * @return 进货信息列表
     */
    public List<HmyMateriaFeedStore> selectStoreList(@Param("position") Integer materiaFeedStorePosition,
                                                     @Param("type") Integer materiaFeedType,
                                                     @Param("dateStart") String materiaFeedPurchaseDateStart,
                                                     @Param("dateEnd") String materiaFeedPurchaseDateEnd);

    /**
     * 根据ID获取单个存储信息
     *
     * @param materiaFeedStoreId ID
     * @return 返回单个对象
     */
    public HmyMateriaFeedStore selectStoreById(@Param("id") Long materiaFeedStoreId);

    /**
     * 新增存储表
     *
     * @param store 参数为对象
     * @return 受影响行数
     */
    public int addStore(HmyMateriaFeedStore store);

    /**
     * 修改存储表信息
     *
     * @param store
     * @return
     */
    public int updateStore(HmyMateriaFeedStore store);

    /**
     * 根据ID删除存储表信息
     *
     * @param materiaFeedStoreId 存储表ID
     * @return 受影响行数
     */
    int delStoreById(Long materiaFeedStoreId);

    /**
     * 根据ID批量删除信息
     *
     * @param materiaFeedStoreIdS ID数组
     * @return 受影响行数
     */
    int delStoreByIds(Long[] materiaFeedStoreIdS);

    /**
     * 根据饲料类型和存储地点获取单个存储信息的数量
     *
     * @param materiaFeedType          饲料类型
     * @param materiaFeedStorePosition 存储地点
     * @return 返回单个存储对象
     */
    public HmyMateriaFeedStore findStoreByTypePosition(@Param("type") String materiaFeedType,
                                                       @Param("position") String materiaFeedStorePosition);

    /**
     * 根据ID更新存储记录的数量
     *
     * @param materiaFeedStoreId  ID
     * @param materiaFeedStoreNum 数量
     * @return 受影响行数
     */
    public int updateStoreNumById(@Param("id") Long materiaFeedStoreId, @Param("num") Long materiaFeedStoreNum);

    /**
     * 根据仓库查询该仓库下饲料类型
     *
     * @param materiaFeedStorePosition
     * @return
     */
    public List<HmyMateriaFeedStore> findStoreFeedTypeByPosition(@Param("position") String materiaFeedStorePosition);


    /**
     * 根据仓库地点和饲料类型对存储数量更新  在消耗表添加时使用
     * @param materiaFeedConsumeNum 消耗数量
     * @param materiaFeedStorePosition 仓库地点
     * @param materiaFeedType 饲料类型
     * @return
     */
    /*public int updateStoreNumByConsume(Long materiaFeedConsumeNum,
                                       String materiaFeedStorePosition,
                                       String materiaFeedType);*/


    /**
     * @param materiaFeedType
     * @return int
     * @author ZHL
     * @date 2024/3/1 13:59
     * @description 根据饲料类型 查询对应的库存量
     */
    int selectMateriaFeedStoreNum( String materiaFeedType);
}
